import matplotlib.pyplot as plt
import numpy as np

"""
    根据三个算法的思想，不调用OpenCV库函数，自己实现灰度化
"""

img = plt.imread('../images/lena.png')
h, w, _ = img.shape
# 创建和原图同等大小的图片，用于存储灰度化结果
img_gray = np.zeros_like(img)
for i in range(h):
    for j in range(w):
        # 1. 加权均值法   R 乘以0.299，G 乘以0.587，B 乘以0.114
        img_gray[i, j, :] = img[i, j, 0] * 0.299 + img[i, j, 1] * 0.587 + img[i, j, 2] * 0.114
        # 2. 平均值法
        img_gray[i, j, :] = (img[i, j, 0] + img[i, j, 1] + img[i, j, 2]) / 3
        # 3. 最大值法
        # plt.imread() 读取的图像数据范围是0-1，是进行过归一化的
        # img_gray[i, j, :] = max(int(img[i, j, 0] * 255), int(img[i, j, 1] * 255), int(img[i, j, 2] * 255)) / 255
        img_gray[i, j, :] = np.max(img[i, j, :])
# 显示原图和灰度化结果
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.subplot(1, 2, 2)
plt.imshow(img_gray)
plt.show()